package bean.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import Entities.Cliente;
import Entities.Empleado;
import Entities.Sucursal;

public class SucursalDAO {

		private static SucursalDAO instancia;
		private static SessionFactory sf;
		
		public static SucursalDAO getInstancia(){
			if(instancia == null){
				sf = (HibernateDAO.getInstancia().getSession().getSessionFactory());
				instancia = new SucursalDAO();
			} 
			return instancia;
		}

		public Sucursal getSucursal(int idSuc) {
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			Sucursal suc = (Sucursal) s.createQuery("from Sucursal where id = :id").setParameter("id", idSuc).uniqueResult();		
			t.commit();
			return suc;
		}
		
		public void altaSucursal(Sucursal suc)
		{
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			s.save(suc);
			t.commit();
			
		}

		public void bajaSucursal(int id) {
			
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			Query buscarSucursal =  s.createQuery("SELECT s FROM Sucursal s WHERE s.Id = :id").setParameter("id",id);
			Sucursal suc = (Sucursal) buscarSucursal.uniqueResult();
            //Borro el objeto de persistencia
            s.delete(suc);
			t.commit();
			
		}

		@SuppressWarnings("unchecked")
		public List<Sucursal> obtenerSucursales() {
			
			
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			List<Sucursal> lista = s.createQuery("from Sucursal").list();	
	
			
			t.commit();
			return lista;
		}

		public void actualizarSucursal(Sucursal sucursal) {
			
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			Query buscarSucursal =  s.createQuery("SELECT s FROM Sucursal s WHERE s.Id = :id").setParameter("id",sucursal.getId());
			Sucursal suc = (Sucursal) buscarSucursal.uniqueResult();
	        
			suc.setNombre(sucursal.getNombre());
			suc.setDireccion(sucursal.getDireccion());
			suc.setLatitud(sucursal.getLatitud());
			suc.setLongitud(sucursal.getLongitud());
			
	        s.update(suc);
	        t.commit();
			
		}
		
		public static void setSf(SessionFactory sf) {
			SucursalDAO.sf = sf;
		}

		public static SessionFactory getSf() {
			return sf;
		}


		
	}


